/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.aspas.persistencia;

import br.com.aspas.modelo.AtividadeInscricao;
import br.com.aspas.modelo.Evento;
import br.com.aspas.modelo.ValidadeInscricao;
import br.com.aspas.util.AbstractDAO;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author gimmli
 */
public class ValidadeInscricaoDao extends AbstractDAO {

    public ValidadeInscricaoDao() {
    }

    public void inserir(ValidadeInscricao validadeInscricao) {
        validadeInscricao.setDataInclusao(new Date());
        insert(validadeInscricao);
    }

    public ValidadeInscricao findByPk(Integer pKey) {
        return (ValidadeInscricao) findByPk(ValidadeInscricao.class, pKey);
    }

    public Boolean remove(Integer id) {
        delete(id, ValidadeInscricao.class);
        return new Boolean(true);
    }

    public void altera(ValidadeInscricao validadeInscricao) {
        validadeInscricao.setDataModificacao(new Date());
        update(validadeInscricao);
    }

    public List<ValidadeInscricao> findAllValidadeInscricao() {
        em = emf.createEntityManager();
        List<ValidadeInscricao> listValidadeInscricao = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v ").getResultList();
        em.close();
        return listValidadeInscricao;
    }

    public ValidadeInscricao findValidade(Date data, Integer codigo) {
        ValidadeInscricao validadeInscricao = null;
        em = emf.createEntityManager();
        try {
            Query query = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v "
                    + " where ? between v.dataInicio  and v.dataValidade " +
                    " and v.atividadeInscricao.codigo= ? ");
            query.setParameter(1, data);
            query.setParameter(2, codigo);
            validadeInscricao = (ValidadeInscricao) query.getSingleResult();
        } catch (Exception e) {
            validadeInscricao = null;
        } finally {
            em.close();
        }
        return validadeInscricao;
    }

       public ValidadeInscricao findValidadeEvento(Date data, Integer codigo,Integer evento) {
        ValidadeInscricao validadeInscricao = null;
        em = emf.createEntityManager();
        try {
            Query query = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v "
                    + " where ? between v.dataInicio  and v.dataValidade " +
                    " and v.atividadeInscricao.codigo= ? and"
                    + " v.evento.codigo = ?");
            query.setParameter(1, data);
            query.setParameter(2, codigo);
            query.setParameter(3, evento);
            validadeInscricao = (ValidadeInscricao) query.getSingleResult();
        } catch (Exception e) {
            validadeInscricao = null;
        } finally {
            em.close();
        }
        return validadeInscricao;
    }

    public Double findValidadeValor(Date data) {
        em = emf.createEntityManager();
        ValidadeInscricao validadeInscricao = null;
        Double valor = null;
        try {
            Query query = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v "
                    + " where v.dataValidade >=? order by v.dataValidade").setParameter(1, data);

            validadeInscricao = (ValidadeInscricao) query.setMaxResults(1).getSingleResult();
            valor = validadeInscricao.getValor();
        } catch (Exception e) {
            valor = null;
        } finally {
            em.close();
        }
        return valor;
    }

    public List<ValidadeInscricao> findValidadeEvento(Evento evento) {
        em = emf.createEntityManager();
        try {
            Query query = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v "
            + " where v.evento.codigo = ? ");
            query.setParameter(1, evento.getCodigo());
            return query.getResultList();

        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

     public ValidadeInscricao findValorAtividade(Evento evento,Double valor,Date data,AtividadeInscricao atividadeInscricao ) {
        em = emf.createEntityManager();
        try {
            Query query = em.createQuery("SELECT object(v) FROM ValidadeInscricao as v "
            + " where v.evento.codigo = ? and "
            + " ? between v.dataInicio  and v.dataValidade and "
            + " v.valor = ? and "
            + " v.atividadeInscricao.codigo= ? ");
            query.setParameter(1, evento.getCodigo());
            query.setParameter(2, data);
            query.setParameter(3, valor);
            query.setParameter(4, atividadeInscricao.getCodigo());
            return (ValidadeInscricao) query.getSingleResult();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }
}
